home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / t_os / algernon / vil_bas.bas < prev    next >
BASIC Source File  |  1993-07-08  |  9KB  |  243 lines

  1. 40030 *VIL_BAS_VER
  2. 40035 VIL_VER=100
  3. 40040 RETURN
  4. 40070 *VIL_BEEP_INITM
  5. 40120 RETURN
  6. 40130 *VIL_GBEEP
  7. 40170 FOR VIL_K=1 TO 4:BEEP 363523,5,400:WAIT 5:NEXT
  8. 40175 RETURN
  9. 40185 *VIL_BBEEP
  10. 40225 BEEP 363523,40,80:WAIT 40
  11. 40230 RETURN
  12. 40270 *VIL_WIN_INITM
  13. 40320 VIL_WX=0:VIL_WY=0
  14. 40325 VIL_WW=0:VIL_WZ=0
  15. 40330 VIL_WUB=0:VIL_WDB=0
  16. 40335 VIL_WLB=0:VIL_WRB=0
  17. 40340 VIL_WAN=0
  18. 40345 VIL_WPM=0
  19. 40350 VIL_WBUFMAX=VIL_W0
  20. 40355 VIL_WANMAX=VIL_W1
  21. 40360 DIM VIL_WBUF%(VIL_W0)
  22. 40365 DIM VIL_WBUFO(VIL_W1)
  23. 40370 DIM VIL_WX(VIL_W1),VIL_WY(VIL_W1)
  24. 40375 DIM VIL_WW(VIL_W1),VIL_WZ(VIL_W1)
  25. 40385 VIL_WX(0)=  0:VIL_WY(0)=  0
  26. 40390 VIL_WW(0)=639:VIL_WZ(0)=479
  27. 40400 RETURN
  28. 40410 *VIL_WOP
  29. 40480 GOSUB *VIL_WPMA
  30. 40485 VIL_WAN=VIL_WAN+1
  31. 40490 VIL_WX(VIL_WAN)=VIL_WX:VIL_WY(VIL_WAN)=VIL_WY
  32. 40495 VIL_WW(VIL_WAN)=VIL_WW:VIL_WZ(VIL_WAN)=VIL_WZ
  33. 40500 VIL_WBUFO(VIL_WAN)=VIL_WBUFO(VIL_WAN-1)                                                        +INT((INT((VIL_WW-VIL_WX+VIL_WLB+VIL_WRB+8)/8)                                        *(VIL_WZ-VIL_WY+VIL_WUB+VIL_WDB+1)*4+1)/2)
  34. 40505 VIL_E=0
  35. 40510 GET@A(VIL_WX-VIL_WLB,VIL_WY-VIL_WUB)-(VIL_WW+VIL_WRB,VIL_WZ+VIL_WDB),              VIL_WBUF%,VIL_WBUFO(VIL_WAN-1)
  36. 40515 IF VIL_E THEN
  37. 40520   VIL_WAN=VIL_WAN-1
  38. 40525   VIL_WX=VIL_WX(VIL_WAN):VIL_WY=VIL_WY(VIL_WAN)
  39. 40530   VIL_WW=VIL_WW(VIL_WAN):VIL_WZ=VIL_WZ(VIL_WAN)
  40. 40535 ENDIF
  41. 40540 RETURN
  42. 40550 *VIL_WCL
  43. 40600 GOSUB *VIL_WPMA
  44. 40605 PUT@A(VIL_WX(VIL_WAN)-VIL_WLB,VIL_WY(VIL_WAN)-VIL_WUB)                           -(VIL_WW(VIL_WAN)+VIL_WRB,VIL_WZ(VIL_WAN)+VIL_WDB),                            VIL_WBUF%,,,,,VIL_WBUFO(VIL_WAN-1)
  45. 40610 VIL_WAN=VIL_WAN-1
  46. 40615 VIL_WX=VIL_WX(VIL_WAN):VIL_WY=VIL_WY(VIL_WAN)
  47. 40620 VIL_WW=VIL_WW(VIL_WAN):VIL_WZ=VIL_WZ(VIL_WAN)
  48. 40625 RETURN
  49. 40635 *VIL_WCLDMY
  50. 40685 GOSUB *VIL_WPMA
  51. 40690 VIL_WAN=VIL_WAN-1
  52. 40695 VIL_WX=VIL_WX(VIL_WAN):VIL_WY=VIL_WY(VIL_WAN)
  53. 40700 VIL_WW=VIL_WW(VIL_WAN):VIL_WZ=VIL_WZ(VIL_WAN)
  54. 40705 RETURN
  55. 40715 *VIL_WCLALL
  56. 40765 WHILE VIL_WAN
  57. 40770   GOSUB *VIL_WCL
  58. 40775 WEND
  59. 40780 RETURN
  60. 40790 *VIL_WPMR
  61. 40830 VIL_WPM=-1
  62. 40835 VIEW(VIL_WX,VIL_WY)-(VIL_WW,VIL_WZ)
  63. 40840 WINDOW(0,0)-(VIL_WW-VIL_WX,VIL_WZ-VIL_WY)
  64. 40845 RETURN
  65. 40855 *VIL_WPMA
  66. 40895 VIL_WPM=0
  67. 40900 VIEW(0,0)-(639,479)
  68. 40905 WINDOW(0,0)-(639,479)
  69. 40910 RETURN
  70. 40940 *VIL_MSEL_INITM
  71. 40990 VIL_MN=0
  72. 40995 VIL_BN=0
  73. 41000 VIL_BCE=0
  74. 41005 VIL_BXDIR=0
  75. 41025 DIM VIL_BXX(VIL_W1),VIL_BXY(VIL_W1)
  76. 41030 DIM VIL_BXW(VIL_W1),VIL_BXZ(VIL_W1)
  77. 41035 DIM VIL_BN(VIL_W0)
  78. 41045 FOR VIL_I=1 TO VIL_W0
  79. 41050   VIL_BN(VIL_I)=1
  80. 41055 NEXT
  81. 41065 MOUSE 0:MOUSE 1,320,240,0
  82. 41070 RETURN
  83. 41080 *VIL_MSEL
  84. 41260 GOSUB *VIL_BCMAKE
  85. 41265 GOSUB *VIL_MSELIN
  86. 41270 RETURN
  87. 41280 *VIL_BCMAKE
  88. 41370 IF VIL_BXDIR AND 2 THEN VIL_W1=-1 ELSE VIL_W1=1
  89. 41375 IF VIL_BXDIR AND 4 THEN VIL_W2=-1 ELSE VIL_W2=1
  90. 41380 FOR VIL_I=1 TO VIL_YN
  91. 41385   FOR VIL_J=1 TO VIL_XN
  92. 41390     IF VIL_BXDIR AND 1 THEN
  93. 41395       VIL_W0=(VIL_J-1)*VIL_YN+VIL_I
  94. 41400     ELSE
  95. 41405       VIL_W0=(VIL_I-1)*VIL_XN+VIL_J
  96. 41410     ENDIF
  97. 41415     VIL_BXX(VIL_W0)=VIL_X+(VIL_J-1)*VIL_XL*VIL_W1
  98. 41420     VIL_BXY(VIL_W0)=VIL_Y+(VIL_I-1)*VIL_YL*VIL_W2
  99. 41425     VIL_BXW(VIL_W0)=VIL_W+(VIL_J-1)*VIL_XL*VIL_W1
  100. 41430     VIL_BXZ(VIL_W0)=VIL_Z+(VIL_I-1)*VIL_YL*VIL_W2
  101. 41435   NEXT
  102. 41440 NEXT
  103. 41445 RETURN
  104. 41455 *VIL_MSELIN
  105. 41630 VIL_W0=MOUSE(3,0)+MOUSE(3,1)
  106. 41635 VIL_W0=VIL_XN*VIL_YN
  107. 41640 VIL_W1=28:VIL_W2=29:VIL_W3=30:VIL_W4=31
  108. 41645 IF VIL_BXDIR AND 2 THEN SWAP VIL_W1,VIL_W2
  109. 41650 IF VIL_BXDIR AND 4 THEN SWAP VIL_W3,VIL_W4
  110. 41655 IF VIL_BXDIR AND 1 THEN SWAP VIL_W1,VIL_W4:SWAP VIL_W2,VIL_W3
  111. 41675 MOUSE 1,,,1
  112. 41680 IF VIL_MN THEN VIL_BN=VIL_BN(VIL_MN)
  113. 41685 IF VIL_BN<1 OR VIL_W0<VIL_BN THEN VIL_BN=1
  114. 41690 IF VIL_BCE=0 THEN GOSUB *VIL_BC
  115. 41700 VIL_K$=INKEY$
  116. 41705 IF VIL_K$<>"" THEN VIL_KY=ASC(VIL_K$) ELSE VIL_KY=0
  117. 41715 IF MOUSE(3,1) OR VIL_KY=48 OR VIL_KY=24 THEN
  118. 41720   VIL_W0=MOUSE(3,0)
  119. 41725   VIL_KN=0
  120. 41730 ELSE IF MOUSE(3,0) OR MOUSE(2,0) THEN
  121. 41735   VIL_KN=-1
  122. 41740   VIL_MX=MOUSE(0):VIL_MY=MOUSE(1)
  123. 41745   IF VIL_WPM THEN
  124. 41750     IF VIL_WPM AND VIL_WX<=VIL_MX AND VIL_MX<=VIL_WW                                        AND VIL_WY<=VIL_MY AND VIL_MY<=VIL_WZ THEN
  125. 41755       VIL_MW=VIL_MX-VIL_WX:VIL_MZ=VIL_MY-VIL_WY
  126. 41760       FOR VIL_I=1 TO VIL_XN
  127. 41765         IF  VIL_BXX(VIL_I)=<VIL_MW AND VIL_MW=<VIL_BXW(VIL_I) THEN
  128. 41770           FOR VIL_J=VIL_I TO VIL_W0 STEP VIL_XN
  129. 41775             IF VIL_BXY(VIL_J)=<VIL_MZ AND VIL_MZ=<VIL_BXZ(VIL_J) THEN
  130. 41780               VIL_KN=VIL_J
  131. 41785               GOSUB *VIL_BC
  132. 41790               VIL_BN=VIL_KN
  133. 41795               GOSUB *VIL_BC
  134. 41800               VIL_I=VIL_W0:VIL_J=VIL_W0
  135. 41805             ENDIF
  136. 41810           NEXT
  137. 41815         ENDIF
  138. 41820       NEXT
  139. 41825     ENDIF
  140. 41830   ELSE
  141. 41835     VIL_MW=-1
  142. 41840     FOR VIL_I=1 TO VIL_XN
  143. 41845       IF  VIL_BXX(VIL_I)=<VIL_MX AND VIL_MX=<VIL_BXW(VIL_I) THEN
  144. 41850         FOR VIL_J=VIL_I TO VIL_W0 STEP VIL_XN
  145. 41855           IF VIL_BXY(VIL_J)=<VIL_MY AND VIL_MY=<VIL_BXZ(VIL_J) THEN
  146. 41860             VIL_KN=VIL_J
  147. 41865             GOSUB *VIL_BC
  148. 41870             VIL_BN=VIL_KN
  149. 41875             GOSUB *VIL_BC
  150. 41880             VIL_I=VIL_W0:VIL_J=VIL_W0
  151. 41885           ENDIF
  152. 41890         NEXT
  153. 41895       ENDIF
  154. 41900     NEXT
  155. 41905   ENDIF
  156. 41910 ELSE
  157. 41915   IF VIL_KY=0 THEN
  158. 41920     GOTO 41700
  159. 41925   ELSE IF 48<VIL_KY AND VIL_KY<58 THEN
  160. 41930     IF VIL_KY<VIL_W0+49 THEN
  161. 41935       VIL_KN=VIL_KY-48:GOSUB *VIL_BC
  162. 41940       VIL_BN=VIL_KN:GOSUB *VIL_BC
  163. 41945     ELSE
  164. 41950       VIL_KN=-2
  165. 41955     ENDIF
  166. 41960   ELSE IF VIL_KY=13 THEN
  167. 41965    VIL_KN=VIL_BN
  168. 41970   ELSE IF 27<VIL_KY AND VIL_KY<32 THEN
  169. 41975     GOSUB *VIL_BC
  170. 41980     VIL_BN=VIL_BN-(VIL_KY=VIL_W1)+(VIL_KY=VIL_W2)                                             +((VIL_KY=VIL_W3)-(VIL_KY=VIL_W4))*VIL_XN
  171. 41985     VIL_BN=VIL_BN+(VIL_KY=VIL_W1 AND (VIL_BN MOD VIL_XN)=1)*VIL_XN
  172. 41990     VIL_BN=VIL_BN-(VIL_KY=VIL_W2 AND ((VIL_BN+1) MOD VIL_XN)=1)*VIL_XN
  173. 41995     VIL_BN=VIL_BN-((VIL_BN<1)-(VIL_BN>VIL_W0))*VIL_W0
  174. 42000     GOSUB *VIL_BC
  175. 42005     GOTO 41700
  176. 42010   ELSE
  177. 42015     VIL_KN=-2
  178. 42020   ENDIF
  179. 42025 ENDIF
  180. 42035 VIL_BN(VIL_MN)=VIL_BN
  181. 42040 MOUSE 1,,,0
  182. 42045 VIL_BCE=-1
  183. 42050 RETURN
  184. 42060 *VIL_BC
  185. 42100 LINE(VIL_BXX(VIL_BN),VIL_BXY(VIL_BN))                                           -(VIL_BXW(VIL_BN),VIL_BXZ(VIL_BN)),XOR,%VIL_C,B
  186. 42105 RETURN
  187. 42135 *VIL_INP_INITM
  188. 42185 MOUSE 0:MOUSE 1,320,240,0
  189. 42190 RETURN
  190. 42200 *VIL_INPSTR
  191. 42325 VIL_W0=LEN(VIL_A$):VIL_W1=VIL_W0
  192. 42330 MOUSE 1,,,1
  193. 42340 GOSUB *VIL_GPRINT
  194. 42345 GOSUB 42560
  195. 42355 VIL_K$=INKEY$
  196. 42360 IF VIL_K$<>"" THEN VIL_KY=ASC(VIL_K$) ELSE VIL_KY=0
  197. 42370 IF MOUSE(3,1) OR VIL_KY=24 THEN
  198. 42375   VIL_KN=0
  199. 42380 ELSE IF MOUSE(3,0) OR MOUSE(2,0) THEN
  200. 42385   VIL_MX=MOUSE(0):VIL_MY=MOUSE(1)
  201. 42390   IF VIL_WPM THEN
  202. 42395     IF VIL_WPM AND VIL_WX<=VIL_MX AND VIL_MX<=VIL_WW                                        AND VIL_WY<=VIL_MY AND VIL_MY<=VIL_WZ THEN
  203. 42400       VIL_MW=VIL_MX-VIL_WX:VIL_MZ=VIL_MY-VIL_WY
  204. 42405     ELSE
  205. 42410       VIL_MW=-1
  206. 42415     ENDIF
  207. 42420   ENDIF
  208. 42425   VIL_KN=-1
  209. 42430 ELSE IF VIL_KY=13 THEN
  210. 42435   VIL_KN=1
  211. 42440 ELSE
  212. 42445   IF VIL_KY=0 THEN 42355
  213. 42450   GOSUB 42560
  214. 42455   IF VIL_KY=29 AND VIL_W1>0      THEN VIL_W1=VIL_W1-1:GOTO 42345
  215. 42460   IF VIL_KY=28 AND VIL_W1<VIL_W0 THEN VIL_W1=VIL_W1+1:GOTO 42345
  216. 42465   IF VIL_KY>=32 AND VIL_KY<>127 AND VIL_W0<VIL_L THEN
  217. 42470     VIL_A$=LEFT$(VIL_A$,VIL_W1)+VIL_K$+MID$(VIL_A$,VIL_W1+1)
  218. 42475     VIL_W0=VIL_W0+1:VIL_W1=VIL_W1+1
  219. 42480   ELSE IF VIL_KY=8 AND VIL_W1>0 THEN
  220. 42485     VIL_A$=LEFT$(VIL_A$,VIL_W1-1)+MID$(VIL_A$,VIL_W1+1)
  221. 42490     VIL_W0=VIL_W0-1:VIL_W1=VIL_W1-1
  222. 42495   ELSE IF VIL_KY=127 AND VIL_W1<VIL_W0 THEN
  223. 42500     VIL_A$=LEFT$(VIL_A$,VIL_W1)+MID$(VIL_A$,VIL_W1+2)
  224. 42505     VIL_W0=VIL_W0-1
  225. 42510   ELSE IF VIL_KY=11 THEN
  226. 42515     VIL_A$="":VIL_W0=0:VIL_W1=0
  227. 42520   ENDIF
  228. 42525   GOTO 42340
  229. 42530 ENDIF
  230. 42535 MOUSE 1,,,0
  231. 42540 GOSUB 42560
  232. 42545 RETURN
  233. 42560 LINE(VIL_X+VIL_W1*8,VIL_Y+17)-(VIL_X+VIL_W1*8+7,VIL_Y+17),XOR,%VIL_C
  234. 42565 RETURN
  235. 42575 *VIL_GPRINT
  236. 42635 LINE(VIL_X,VIL_Y)-(VIL_X+VIL_L*8-1,VIL_Y+15),PSET,%VIL_CB,BF
  237. 42640 SYMBOL(VIL_X,VIL_Y),VIL_A$,1,1,%VIL_C
  238. 42645 RETURN
  239. 42655 *VIL_MVWAIT
  240. 42695 VIL_W0=MOUSE(9)+MOUSE(10):VIL_W0$=INKEY$
  241. 42700 WHILE ABS(MOUSE(9))<10 AND ABS(MOUSE(10))<10                                   AND MOUSE(2,0)+MOUSE(2,1)=0 AND INKEY$="":WEND
  242. 42705 RETURN
  243.